/** 需求1: 整数分割千分位
 * '12345678' => '12,345,678'
*/

// \d{3}$ 匹配的是目标字符串最后那 3 位数字。
// (?=\d{3}$) 匹配 \d{3}$ 前面的位置。
// (?=(\d{3})+$) 因为逗号出现的位置，要求后面 3 个数字一组，也就是 \d{3} 至少出现一次。
// (?!^)  ?!和?=相反，表示要求当前是一个位置，但不是开头的的位置
const reg1 = /(?!^)(?=(\d{3})+$)/g
let result = '1000000'
console.log(result.replace(reg1, ',')) // '1,000,000'




/**需求2: 每三位数字做分割
 * '12345678 123456789' => '12,345,678 123,456,789'
*/

// \b 是单词边界， 比如考察文件名 "[JS] Lesson_01.mp4" 中的 \b，如下：
// var result = "[JS] Lesson_01.mp4".replace(/\b/g, '#');
// console.log(result);   // "[#JS#] #Lesson_01#.#mp4#"
// (?!\b) 要求当前是一个位置，但不是 \b 前面的位置，其实 (?!\b) 说的就是 \B。
// 最终变成 /\B(?=(\d{3})+\b)/g
const reg2 = /\B(?=(\d{3})+\b)/g  // => /(?!\b)(?=(\d{3})+\b)/g
result = '12345678 123456789'
console.log(result.replace(reg2, ',')) // '12,345,678 123,456,789'



/** 需求3: 货币格式化
 * '1888' => '$1888.00'
*/
function format (num, prefix='$') {
  const str =  num.toFixed(2).replace(/\B(?=(\d{3})+\b)/g, ",")
  return `${prefix}${str}`
};
console.log( format(1888) ); // '$1,888'
